package com.eugenema.demand.impl;

import com.eugenema.demand.Demand;
import com.eugenema.entity.FutureMatch;
import com.eugenema.util.Annotation.DemandBean;
import com.eugenema.util.DemandUtil.LeagueMatchUtil;
import com.eugenema.util.SeleniumUtil;
import com.eugenema.util.SeleniumXmlParseUtil;
import org.openqa.selenium.WebElement;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
 * <p>标题：F2 赛程</p>
 * <p>
 *  功能：获取指定球队最近 5 场比赛赛程
 * </p>
 * <p>其他说明：</p>
 * <p>作者：马寅广</p>
 * <p>审核：</p>
 * <p>重构：</p>
 * <p>创建日期：2024/1/1 13:28</p>
 */
@DemandBean(key = DemandF2Schedule.DEMAND_THREE_PARAMETER_KEY, title = "F2 赛程", notice = "获取指定球队最近 5 场比赛赛程", order = 4)
public class DemandF2Schedule extends Demand {
    /** 需求三要抓数的指定球队 key */
    public static final String DEMAND_THREE_PARAMETER_KEY = "team_three";
    /** 需求三映射后的实体列表 */
    private static List<FutureMatch> futureMatchFullList = new ArrayList<>();

    /**
     * 初始化按钮
     *
     * @author 马寅广
     * @date 2024/1/1 13:32
     *
     **/
    @Override
    public void initButton() {
        createEditParameterButton();
        createOpenFileButton("F2赛程.xlsx");
    }

    /**
     * 执行需求
     *
     * @author 马寅广
     * @date 2024/1/1 13:33
     *
     *
     * @return 执行结果
     **/
    @Override
    public boolean execute() {
        //获取要遍历的球队
        Map<String, String> teamMap = (Map<String, String>) SeleniumXmlParseUtil.parameterMap.get(DEMAND_THREE_PARAMETER_KEY);
        //遍历球队
        LeagueMatchUtil.teamDeal(RunSeleniumService(), teamMap, teamEntry -> {
            //获取未来比赛
            RunSeleniumService().runStep("step_6");
            List<WebElement> futureMatchTrList = (List<WebElement>) SeleniumUtil.globalMap.get("step_6");

            if (futureMatchTrList.size() < 1) {
                Logger().info("【{}】球队获取未来比赛为空，已跳过", teamEntry.getKey());
                return;
            }

            //将未来最近 5 次比赛数据映射成实体类
            LeagueMatchUtil.entityMap(futureMatchTrList, teamEntry.getKey(), teamEntry.getValue(), null, null, futureMatchFullList);
        });

        //将处理好的数据存入全局存储 map（Selenium.globalMap）
        SeleniumUtil.globalMap.put("demandThree", futureMatchFullList);

        //将获取到的所有球队的未来最近一次比赛数据输出至 Excel
        RunSeleniumService().runStep("step_9");
        return true;
    }
}
